package ControleAcademico.Model.Dao;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import ControleAcademico.Model.Pojo.Disciplina;
import ControleAcademico.Model.Pojo.Professor;
import ControleAcademico.Model.Pojo.Turma;

public class ProfessorImpl implements ProfessorDao{

	private ArrayList<Professor> listaDeProfessores = null;
	private DisciplinaImpl disciplinaImpl;
	private TurmaImpl turmaImpl;
	
	public ProfessorImpl(TurmaImpl turmaImpl, DisciplinaImpl disciplinaImpl) {
		listaDeProfessores = new ArrayList<Professor>();	
		this.disciplinaImpl = disciplinaImpl;
		this.turmaImpl = turmaImpl;
	}
	
	@Override
	public void salvar(Professor professor, int flag){
		
		try{
			
			if (flag != -1) {
				listaDeProfessores.add(professor);
			} else {
				PrintWriter p = new PrintWriter("Professores.txt");
				for(Professor professores : listaDeProfessores){
					p.write(professores.getId()+"\t");
					p.write(professores.getNome()+"\t");
					p.write(professores.getCpf()+"\t");
					p.write(professores.getDepartamento()+"\t");

					p.write ("Turmas\t");
					for(Turma i : professores.getTurmas()){
						p.write(i.getId()+"\t");
					}
					
					p.write ("Disciplinas\t");
					
					for(Disciplina i : professores.getDisciplinas()){
						p.write(i.getId()+"\t");
					}
	
					p.write("#");
					p.write("\n");
				}
				
				p.close();
			}
		}catch(Exception e){

		}
	}
	
	public ArrayList<Professor> getListaDeProfessores (){
		return listaDeProfessores;
	}
	@Override
	public void carregar() {
		
	      String linha = null; 
	      
	      try {  
	    	 FileReader reader = new FileReader("Professores.txt");    	
	         BufferedReader leitor = new BufferedReader(reader);  
	         Professor professor =  null;
	         Disciplina disciplina = null;
	         Turma turma = null;

	         while ((linha = leitor.readLine()) != null) {  
	            String[] dados = linha.split("\t"); 
	            int identificador = Integer.parseInt(dados[0]);
	            
	            if (!this.pesquisarNaListaImpl(Integer.parseInt(dados[0]))){
	            	
	            	professor = new Professor(dados[1], dados[2],dados[3],Integer.parseInt(dados[0]));
		            int i=5;
		            
		            while (!(dados[i].equals("Disciplinas"))) { 
			            
		            	if(!turmaImpl.pesquisarNaListaImpl(Integer.parseInt(dados[i]))){
		            		turma = turmaImpl.pesquisarArquivo(Integer.parseInt(dados[i]));
		            		turmaImpl.adicionarTurma(turma);
		            	}else{
		            		for (Turma k : turmaImpl.getTurmas()) {
								if (k.getId() == identificador){
									turma = k;
									break;
								}
							}
		            	}
		            	professor.adicionarTurma(turma);
		            	i++;
		            }
		            i++;
		            
		            
		            while (!(dados[i].equals("#"))) { 
		            	disciplina = disciplinaImpl.pesquisarDisciplina(Integer.parseInt(dados[i]));
		            	professor.adicionarDisciplina(disciplina);
		            	i++;
		            }
		            listaDeProfessores.add(professor); 
	            }else{
	            	for (Professor k : listaDeProfessores) {
						if (k.getId() == identificador){
							professor = k;
						}
					}
	            	
	            	 int i=5;
			            
			            while (!(dados[i].equals("Disciplinas"))) { 
				            
			            	if(!turmaImpl.pesquisarNaListaImpl(Integer.parseInt(dados[i]))){
			            		turma = turmaImpl.pesquisarArquivo(Integer.parseInt(dados[i]));
			            		turmaImpl.adicionarTurma(turma);
			            	}
			            	else{
			            		for (Turma k : turmaImpl.getTurmas()) {
									if (k.getId() == identificador){
										turma = k;
										break;
									}
								}
			            	}
			            	professor.adicionarTurma(turma);
			            	i++;
			            }
			            i++;
			            
			            while (!(dados[i].equals("#"))) { 
			            	disciplina = disciplinaImpl.pesquisarDisciplina(Integer.parseInt(dados[i]));
			            	professor.adicionarDisciplina(disciplina);
			            	i++;
			            }
	            }
	         }  
	         leitor.close();  
	         reader.close();  
	      } catch (Exception e) { 
	  
	      }  
	  }
	
	public Professor pesquisarArquivo(int id){
		String linha;
		String identificador = id + "";
		Professor professor = null;
		
		try{
			FileReader reader = new FileReader("Professores.txt");    	
	        BufferedReader leitor = new BufferedReader(reader);

	        while ((linha = leitor.readLine()) != null) {
	        	String[] dados = linha.split("\t");

	        	if(dados[0].equals(identificador)){
	        		professor = new Professor(dados[1],dados[2],dados[3], id);
	        		return professor;
	        	}
	        }
		}catch(Exception e){
			
		}
        return professor;
		
	}
	
	public void adicionarProfessor (Professor professor){
		this.listaDeProfessores.add(professor);
	}
	
	public boolean pesquisarNaListaImpl(int id){
		for (Professor professor: listaDeProfessores) {
			if (professor.getId() == id){
				return true;		
			}
		}
		return false;
	}
	
	public Professor pesquisarProfessor(int id){
		Professor professor = null;
		for (Professor i : listaDeProfessores) {
			if (i.getId() == id){
				professor = i;
				return professor;		
			}
		}
		return professor;
	}
}
